package com.fjh.springboot_01.controller;

import com.fjh.springboot_01.pojo.Feedback;
import com.fjh.springboot_01.pojo.Result;
import com.fjh.springboot_01.service.FeedbackService;
import com.fjh.springboot_01.utils.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/feedback")
public class FeedbackController {
    
    @Autowired
    private FeedbackService feedbackService;
    
    /**
     * 添加留言反馈
     */
    @PostMapping
    public Result add(@RequestBody Feedback feedback) {
        // 获取当前登录用户信息
        Map<String, Object> claims = ThreadLocalUtil.get();
        Integer userId = (Integer) claims.get("id");
        String username = (String) claims.get("username");
        
        // 设置用户ID和用户名
        feedback.setUserId(userId);
        feedback.setUsername(username);
        
        // 添加留言反馈
        feedbackService.addFeedback(feedback);
        
        return Result.success();
    }
    
    /**
     * 查询当前用户的留言反馈
     */
    @GetMapping("/my")
    public Result getMyFeedbacks() {
        // 获取当前登录用户信息
        Map<String, Object> claims = ThreadLocalUtil.get();
        Integer userId = (Integer) claims.get("id");
        
        // 查询留言反馈
        List<Feedback> feedbacks = feedbackService.getFeedbacksByUserId(userId);
        
        return Result.success(feedbacks);
    }
    
    /**
     * 查询所有留言反馈（管理员使用）
     */
    @GetMapping
    public Result getAllFeedbacks() {
        // 获取当前登录用户信息
        Map<String, Object> claims = ThreadLocalUtil.get();
        Integer role = (Integer) claims.get("role");
        
        // 检查权限
        if (role != 2) {
            return Result.error("权限不足");
        }
        
        // 查询所有留言反馈
        List<Feedback> feedbacks = feedbackService.getAllFeedbacks();
        
        return Result.success(feedbacks);
    }
    
    /**
     * 回复留言反馈（管理员使用）
     */
    @PutMapping("/reply/{id}")
    public Result replyFeedback(@PathVariable Integer id, @RequestBody Feedback feedback) {
        // 获取当前登录用户信息
        Map<String, Object> claims = ThreadLocalUtil.get();
        Integer role = (Integer) claims.get("role");
        Integer replyUserId = (Integer) claims.get("id");
        String replyUsername = (String) claims.get("username");
        
        // 检查权限
        if (role != 2) {
            return Result.error("权限不足");
        }
        
        // 检查反馈是否存在
        Feedback existFeedback = feedbackService.getFeedbackById(id);
        if (existFeedback == null) {
            return Result.error("留言反馈不存在");
        }
        
        // 设置回复相关信息
        feedback.setId(id);
        feedback.setReplyUserId(replyUserId);
        feedback.setReplyUsername(replyUsername);
        
        // 回复留言反馈
        feedbackService.replyFeedback(feedback);
        
        return Result.success();
    }
    
    /**
     * 删除留言反馈
     */
    @DeleteMapping("/{id}")
    public Result deleteFeedback(@PathVariable Integer id) {
        // 获取当前登录用户信息
        Map<String, Object> claims = ThreadLocalUtil.get();
        Integer userId = (Integer) claims.get("id");
        Integer role = (Integer) claims.get("role");
        
        // 检查反馈是否存在
        Feedback feedback = feedbackService.getFeedbackById(id);
        if (feedback == null) {
            return Result.error("留言反馈不存在");
        }
        
        // 检查权限（只允许管理员和留言本人删除）
        if (role != 2 && !feedback.getUserId().equals(userId)) {
            return Result.error("权限不足");
        }
        
        // 删除留言反馈
        feedbackService.deleteFeedback(id);
        
        return Result.success();
    }
} 